﻿Imports Microsoft.InteropFormTools
Imports System.ServiceModel

<InteropForm()> _
Public Class WährungsRechner

    Public Class VBWährungsErgebnis
        Public Value As Double
    End Class

    <InteropFormMethod()> _
    Public Shared Function VBWährungsFaktor(ByVal vonWährung As String, ByVal zuWährung As String) As Object
        Dim wfe As New VBWährungsErgebnis
        wfe.Value = Währungsfaktor(vonWährung, zuWährung)
        Return wfe
    End Function

    Public Shared Function Währungsfaktor(ByVal VonWährung As String, ByVal ZuWährung As String) As Double

        'Wie kommen wir von einer Zeichenkette zum Enum-Wert?

        'Erst den Typ ermitteln
        Dim wsCurrencyType As Type = GetType(WährungsService.Currency)

        'Dann aus der Zeichenfolge mit Parse in die Enum konvertieren
        Dim enumObject As Object
        enumObject = [Enum].Parse(wsCurrencyType, VonWährung)

        'Jetzt nun die Enum aus dem Objekt zurück in den konkreten Typ casten
        Dim vonCurrency As WährungsService.Currency
        vonCurrency = DirectCast(enumObject, WährungsService.Currency)

        'Und so sieht das aus, wenn wir es in eine Zeile packen:
        Dim zuCurrency = DirectCast( _
                                    [Enum].Parse( _
                                    GetType(WährungsService.Currency), _
                                    ZuWährung),  _
                                    WährungsService.Currency)

        Dim cc As New WährungsService.CurrencyConvertorSoapClient(New BasicHttpBinding, New EndpointAddress("http://www.webservicex.net/CurrencyConvertor.asmx"))
        Return cc.ConversionRate(vonCurrency, zuCurrency)
    End Function

    Private Sub btnBerechnen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBerechnen.Click
        Dim faktor = Währungsfaktor( _
            cmbAusgangswährung.SelectedItem.ToString.Substring(0, 3), _
            cmbZielwährung.SelectedItem.ToString.Substring(0, 3))
        lblErgebnis.Text = (faktor * Double.Parse(txtAusgangsbetrag.Text)).ToString("#,##0.00")

    End Sub

    Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
        Me.DialogResult = Windows.Forms.DialogResult.OK
    End Sub
End Class